package br.unicamp.ic.inf300.arena.modelo.vendas;
/**
 * Venda de Bilhetes Eletronicos para Espetaculos (Arena Entretenimento S.A.)
 * ValeEntrada.java
 */
import java.util.Date;

public class ValeEntrada extends Pagamento {
	private Date validade;
	private Estorno estorno;

	//--
	public ValeEntrada() {
		super(Pagamento.TIPO_VALE_ENTRADA);
	}

	/**
	 * 
	 * @param codpagto
	 * @param valor
	 * @param validade
	 * @param codestorno
	 */
	public ValeEntrada(int codpagto, double valor, Date validade,
			long codestorno) {
		super(codpagto, Pagamento.TIPO_VALE_ENTRADA, valor);
		this.validade = validade;
		this.estorno = new Estorno();
		this.estorno.setNumero(codestorno);
	}

	public Estorno getEstorno() {
		return estorno;
	}

	public void setEstorno(Estorno estorno) {
		this.estorno = estorno;
	}

	public Date getValidade() {
		return validade;
	}

	public void setValidade(Date validade) {
		this.validade = validade;
	}

	/**
	 * @return <code>String</code>
	 * JUtils plugin ;-)
	 */
	public String toString()
	{
	    final String TAB = "    ";
	    
	    StringBuffer retValue = new StringBuffer();
	    
	    retValue.append("ValeEntrada ( ")
	        .append(super.toString()).append(TAB)
	        .append("estorno = ").append(this.estorno).append(TAB)
	        .append("validade = ").append(this.validade).append(TAB)
	        .append(" )");
	    
	    return retValue.toString();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result + ((estorno == null) ? 0 : estorno.hashCode());
		result = prime * result
				+ ((validade == null) ? 0 : validade.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		final ValeEntrada other = (ValeEntrada) obj;
		if (estorno == null) {
			if (other.estorno != null)
				return false;
		} else if (!estorno.equals(other.estorno))
			return false;
		if (validade == null) {
			if (other.validade != null)
				return false;
		} else if (!validade.equals(other.validade))
			return false;
		return true;
	}
}